class Solution {
    public int minPathSum(int[][] grid) {
//初始化时注意多加的一行一列，初始要不影响dp本来应取得的值
//dp[0][1]和dp[1][0]都是0，其他多加的都是Integer.MAX_VALUE才能不影响本来应该得到的dp值
        int m=grid.length;
        int n=grid[0].length;

        int[][] dp=new int[m+1][n+1];

        for(int i=0;i<=m;i++){
            dp[i][0]=Integer.MAX_VALUE;
        }
        for(int j=0;j<=n;j++){
            dp[0][j]=Integer.MAX_VALUE;
        }
        dp[0][1]=dp[1][0]=0;

        for(int i=1;i<=m;i++){
            for(int j=1;j<=n;j++){
                dp[i][j]=Math.min(dp[i-1][j],dp[i][j-1]) + grid[i-1][j-1];
            }
        }

        return dp[m][n];

    }
}